#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：图灵学习 
@File    ：7.jsonpath代码练习.py
@IDE     ：PyCharm 
@Author  ：ChenLiGao
@Date    ：2024-11-22 15:20
'''
from jsonpath import jsonpath

info = {
    "store": {
        "book": [
            {"category": "reference",
             "author": "Nigel Rees",
             "title": "Sayings of the Century",
             "price": 4.95
             },
            {"category": "fiction",
             "author": "Evelyn Waugh",
             "title": "Sword of Honour",
             "price": 12.99
             },
            {"category": "fiction",
             "author": "Herman Melville",
             "title": "Moby Dick",
             "isbn": "0-553-21311-3",
             "price": 8.99
             },
            {"category": "fiction",
             "author": "J. R. R. Tolkien",
             "title": "The Lord of the Rings",
             "isbn": "0-395-19395-8",
             "price": 22.99
             }
        ],
        "bicycle": {
            "color": "red",
            "author": "test",
            "price": 19.95
        }
    }
}


# 1. 提取第1本书的title
print("\n\n---------1. 提取第1本书的title-----------")
res = jsonpath(info, "$.store.book[0].title")
print(res)

# 1.外层必须是双引号，节点名称必须是单引号
# 2.或者里面不用引号，外面单双引号都可以
res = jsonpath(info, '$[store][book][0][title]')
print(res)



# 2. 提取2、3、4本书的标题
print("\n\n---------2. 提取2、3、4本书的标题-----------")
res = jsonpath(info, "$.store.book[1,2,3].title")
print(res)
print("\n**************************************************************")
res = jsonpath(info, "$.store.book[1:].title")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book[1:4].title")
print(res)

# 3. 提取1、3本书的标题
print("\n\n----------3. 提取1、3本书的标题----------")
res = jsonpath(info, "$.store.book[0,2].title")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book[::2].title")
print(res)

# 4. 提取最后一本书的标题
print("\n\n---------4. 提取最后一本书的标题-----------")

res = jsonpath(info, "$.store.book[(@.length-1)].title")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book[-1:].title")
print(res)


# 5. 提取价格小于10的书的标题
print("\n\n----------5. 提取价格小于10的书的标题----------")
res = jsonpath(info, "$.store.book[?(@.price < 10)].title")
print(res)

# 6. 提取价格小于或者等于20的所有商品的价格

print("\n\n---------6. 提取价格小于或者等于20的所有商品的价格-----------")
res = jsonpath(info, "$.store.book[?(@.price <= 20)].price") # 限制只有书的价格
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$..*[?(@.price <= 20)].price") # 所有商品
print(res)

# 7. 获取所有书的作者
print("\n\n---------7. 获取所有书的作者-----------")
res = jsonpath(info, "$..author")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book[*].author")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book[::].author")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book..author")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store.book.author") # 列表元素不能省略[]（中括号），如果要取所有的数据，就用[::]或者[*]
print(res)

# 8. 获取所有作者
print("\n\n---------8. 获取所有作者-----------")
res = jsonpath(info, "$..author")
print(res)

# 9. 获取在store中的所有商品(包括书、自行车)
print("\n\n---------9. 获取在store中的所有商品(包括书、自行车)-----------")
res = jsonpath(info, "$.store")
print(res)
print("\n**************************************************************")
res = jsonpath(info, "$..store")
print(res)

# 10. 获取所有商品（包括书、自行车）的价格
print("\n\n---------10. 获取所有商品（包括书、自行车）的价格-----------")
res = jsonpath(info, "$..price")
print(res)
print("\n**************************************************************")

res = jsonpath(info, "$.store..price")
print(res)

# 11. 获取带有isbn的书
print("\n\n---------11. 获取带有isbn的书-----------")
res = jsonpath(info, "$..book[?(@.isbn)].title")
print(res)

# 12. 获取不带有isbn的书
print("\n\n---------12. 获取不带有isbn的书-----------")
res = jsonpath(info, "$..book[?(!@.isbn)].title")
print(res)

# 13. 获取价格在5~10之间的书
print("\n\n---------13. 获取价格在5~10之间的书-----------")
res = jsonpath(info, "$..book[?(@.price >= 5 && @.price <= 10)].title")
print(res)

# 14. 获取价格不在5~10之间的书
print("\n\n---------14. 获取价格不在5~10之间的书-----------")
res = jsonpath(info, "$..book[?(@.price < 5 || @.price > 10)].title")
print(res)

# 15. 获取所有的元素
print("\n\n---------15. 获取所有的元素-----------")
res = jsonpath(info, "$..")
print(res)

print("\n**************************************************************")
res = jsonpath(info, "$.*") # *是返回当前节点的子节点
print(res)